langchaingo dynamodb chat history
1.0.0
langchain을 사용하여 이동 응용 프로그램의 메모리/히스토리 백엔드로 DynamoDB를 사용하십시오.
다음은 시도하는 데 사용할 수있는 샘플 응용 프로그램입니다.
DynamODB 테이블을 만들어 시작하십시오.
export DYNAMODB_TABLE_NAME=test-table
export PARTITION_KEY=chat_id
aws dynamodb create-table
--table-name $DYNAMODB_TABLE_NAME
--attribute-definitions AttributeName= $PARTITION_KEY ,AttributeType=S
--key-schema AttributeName= $PARTITION_KEY ,KeyType=HASH
--billing-mode PAY_PER_REQUEST 아래 샘플 앱은 Amazon Bedrock을 사용합니다 (Line llm, err := claude.New(region, llm.DontUseHumanAssistantPrompt()) ). 이를 위해서는 적절한 IAM 권한을 보장해야합니다. "시작하기 전에"섹션을 참조하십시오.
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Effect" : " Allow " ,
"Action" : " bedrock:* " ,
"Resource" : " * "
}
]
} 프로그램을 main.go 라는 파일에 저장하십시오.
그런 다음 새로운 GO 모듈을 만들고 프로그램을 실행하고 채팅을 시작하십시오.
go mod init demo
go mod tidy
export DYNAMODB_TABLE_NAME=test-table
export PARTITION_KEY=chat_id
go run main.go완전한 프로그램 :
package main
import (
"bufio"
"context"
"fmt"
"log"
"os"
"strings"
ddbhist "github.com/abhirockzz/langchaingo-dynamodb-chat-history/dynamodb_chat_history"
"github.com/google/uuid"
"github.com/abhirockzz/amazon-bedrock-langchain-go/llm"
"github.com/abhirockzz/amazon-bedrock-langchain-go/llm/claude"
"github.com/tmc/langchaingo/chains"
"github.com/tmc/langchaingo/memory"
"github.com/tmc/langchaingo/outputparser"
"github.com/tmc/langchaingo/prompts"
)
const template = "{{.chat_history}} n n Human:{{.human_input}} n n Assistant:"
func main () {
region := "us-east-1"
llm , err := claude . New ( region , llm . DontUseHumanAssistantPrompt ())
if err != nil {
log . Fatal ( err )
}
//a random uuid is used as primary key value. typically, in an application this would be a unique identifier such as a session ID.
pkValue := uuid . New (). String ()
ddbcmh , err := ddbhist . New ( region , ddbhist . WithTableName ( os . Getenv ( "DYNAMODB_TABLE_NAME" )), ddbhist . WithPrimaryKeyName ( os . Getenv ( "PARTITION_KEY" )), ddbhist . WithPrimaryKeyValue ( pkValue ))
if err != nil {
log . Fatal ( err )
}
chain := chains. LLMChain {
Prompt : prompts . NewPromptTemplate (
template ,
[] string { "chat_history" , "human_input" },
),
LLM : llm ,
Memory : memory . NewConversationBuffer (
memory . WithMemoryKey ( "chat_history" ),
memory . WithAIPrefix ( " n n Assistant" ),
memory . WithHumanPrefix ( " n n Human" ),
memory . WithChatHistory ( ddbcmh ),
),
OutputParser : outputparser . NewSimple (),
OutputKey : "text" ,
}
ctx := context . Background ()
reader := bufio . NewReader ( os . Stdin )
for {
fmt . Print ( " n Enter your message: " )
input , _ := reader . ReadString ( 'n' )
input = strings . TrimSpace ( input )
_ , err := chains . Call ( ctx , chain , map [ string ] any { "human_input" : input }, chains . WithMaxTokens ( 8191 ),
chains . WithStreamingFunc (
func ( ctx context. Context , chunk [] byte ) error {
fmt . Print ( string ( chunk ))
return nil
},
))
if err != nil {
log . Fatal ( err )
}
}
}DynamoDB에서 채팅 기록 확인 :
export DYNAMODB_TABLE_NAME=test-table
aws dynamodb scan --table-name $DYNAMODB_TABLE_NAME테이블을 삭제하려면 :
export DYNAMODB_TABLE_NAME=test-table
aws dynamodb delete-table --table-name $DYNAMODB_TABLE_NAME