NodeJS 如何在Nest TS中使用模型Claude v2使用AWS brocket保持对话?

kpbpu008  于 5个月前  发布在  Node.js
关注(0)|答案(1)|浏览(65)

我一直在使用Claudev2模型的AWS基岩工作。
我已经成功地通过Bedrock API制作了我的第一个提示符。问题是它没有读到以前的消息,这就像制作了一个新的示例。
这是我的工作代码,它是一个Nest.js类型脚本:

export const send = async (message: string) => {
return new Promise(async (resolve, reject) => {
    try {
        console.log("Sending...")
        AWS.config.update({
            accessKeyId: process.env.ACCESS_KEY,
            secretAccessKey: process.env.SECRET_ACCESS_KEY,
            sessionToken: process.env.SESSION_TOKEN,
            region: process.env.REGION,
        });
        const bedrock = new AWS.BedrockRuntime();

        const params: any = {
            "modelId": "anthropic.claude-v2",
            "contentType": "application/json",
            "accept": "application/json",
            "body": JSON.stringify({
                "prompt": `\n\nHuman:\n  ${message}
                    
                    \n\nAssistant:
                `,
                "max_tokens_to_sample": 2048,
                "temperature": 0.5,
                "top_k": 250,
                "top_p": 1,
                "stop_sequences": [
                    "\\n\\nHuman:"
                ],
                "anthropic_version": "bedrock-2023-05-31"
            })
        }
        const data = await bedrock.invokeModel(params).promise()
        if (!data) {
            console.error("Error invoking the model:", data);
            resolve(data)
        } else {
            const response_body = JSON.parse(data.body.toString());
            resolve(response_body)
        }
    } catch (error) {
        console.log("Failed to send")
        reject(error);
    }
});

字符串
}
我最近发现可以在aws basestal中使用Streaming API,但是没有资源。下面是我的代码:

export const streaming = async () => {
    return new Promise(async (resolve, reject) => {
        try {
            AWS.config.update({
                accessKeyId: process.env.ACCESS_KEY,
                secretAccessKey: process.env.SECRET_ACCESS_KEY,
                sessionToken: process.env.SESSION_TOKEN,
                region: process.env.REGION,
            });
            const bedrock = new AWS.BedrockRuntime();
            const params = {
                modelId: "anthropic.claude-v2",
                contentType: "application/json",
                accept: "application/json",
                body: JSON.stringify({
                    prompt: `
                        \n\nHuman:explain black holes to 8th graders
                        \n\nAssistant:
                    `,
                    max_tokens_to_sample: 300,
                    temperature: 0.1,
                    top_p: 0.9,
                }),
                responseStream: true // Set responseStream to true to receive a response stream
                ,
            };

            const responseStream = bedrock.invokeModelWithResponseStream(params);

            // @ts-ignore
            responseStream.on("data", (data: any) => {
                // Process the response data as it streams
                console.log("Received data:", data.toString());
            });

            responseStream.on("end", (): void => {
                // Streaming response complete
                console.log("Streaming complete.");
                // @ts-ignore
                resolve();
            });

            responseStream.on("error", (err) => {
                console.error("Error while streaming response:", err);
                reject(err);
            });
        } catch (error) {
            reject(error);
        }
    });
};


使用bedrock.invokeModelWithResponseStream(params);,我可以让它运行。它开始侦听。但是我不知道如何向正在运行的侦听器发送消息。
到目前为止,我一直在使用AWS SDK的JavaScript v2,我不能让它在Javascript v3中运行。
ChatGPT没有关于AWS Bedrock的数据。
参考文献:
https://docs.anthropic.com/claude/reference/streaming
https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html的一个。

llycmphe

llycmphe1#

我也有同样的问题与Llama2模型有关。出于各种原因,我转向使用Claude2模型,并发现了如何在此过程中进行对话。基本上,与Claude2进行对话的方式是通过存储整个对话的状态,然后将越来越大的对话片段传递给模型。每次向模型发送文本时,它应该代表到那一点为止的整个对话。每个Human条目之前应该加上“\n\nHuman:“,每个Claude2条目之前应该加上“\n\nAssistant:“。

相关问题